package com.fx.zmlzml.common.response;

import com.fx.zmlzml.util.MessageUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 统一响应结果类
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {
    
    private int code; // 响应状态码
    private String msg; // 响应消息
    private T data; // 响应数据
    
    /**
     * 成功响应，带数据
     */
    public static <T> Result<T> success(T data) {
        return new Result<>(200, MessageUtils.getMessage("common.success", null, "success"), data);
    }
    
    /**
     * 成功响应，不带数据
     */
    public static <T> Result<T> success() {
        return new Result<>(200, MessageUtils.getMessage("common.success", null, "success"), null);
    }
    
    /**
     * 失败响应
     */
    public static <T> Result<T> error(int code, String msg) {
        return new Result<>(code, msg, null);
    }
    
    /**
     * 失败响应，使用默认错误码
     */
    public static <T> Result<T> error(String msg) {
        return new Result<>(500, msg, null);
    }
    
    /**
     * 国际化成功响应，带数据
     */
    public static <T> Result<T> i18nSuccess(T data, String msg, Object[] args) {
        return new Result<>(200, MessageUtils.getMessage(msg, args), data);
    }

    /**
     * 国际化成功响应，不带数据
     */
    public static <T> Result<T> i18nSuccess(String msg, Object[] args) {
        return new Result<>(200, MessageUtils.getMessage(msg, args), null);
    }

    /**
     * 国际化失败响应
     */
    public static <T> Result<T> i18nError(int code, String msg, Object[] args) {
        return new Result<>(code, MessageUtils.getMessage(msg, args), null);
    }

    /**
     * 国际化失败响应，使用默认错误码
     */
    public static <T> Result<T> i18nError(String msg, Object[] args) {
        return new Result<>(500, MessageUtils.getMessage(msg, args), null);
    }
}